package com.example.stuwork.service.impl;

import com.example.stuwork.dao.TeacherDao;
import com.example.stuwork.pojo.Teacher;
import com.example.stuwork.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.List;

/**
 * 教师服务实现类
 */
@Service
public class TeacherServiceImpl implements TeacherService {

    @Autowired
    private TeacherDao teacherDao;

    /**
     * 获取所有教师
     *
     * @return 教师列表
     */
    @Override
    public List<Teacher> findAll() {
        return teacherDao.findAll();
    }

    /**
     * 根据教师工号获取教师信息
     *
     * @param teacherId 教师工号
     * @return 教师信息
     */
    @Override
    public Teacher getById(String teacherId) {
        if (StringUtils.isEmpty(teacherId)) {
            return null;
        }
        return teacherDao.getById(teacherId);
    }

    /**
     * 根据院系编号获取教师列表
     *
     * @param deptNumber 院系编号
     * @return 教师列表
     */
    @Override
    public List<Teacher> findByDeptNumber(String deptNumber) {
        if (StringUtils.isEmpty(deptNumber)) {
            return List.of(); // 返回空列表
        }
        return teacherDao.findByDeptNumber(deptNumber);
    }

    /**
     * 添加教师
     *
     * @param teacher 教师信息
     * @return 是否成功
     */
    @Override
    @Transactional
    public boolean addTeacher(Teacher teacher) {
        // 验证参数
        if (teacher == null) {
            return false;
        }
        
        // 验证必填字段
        if (StringUtils.isEmpty(teacher.getTeacherId()) ||
            StringUtils.isEmpty(teacher.getPassword()) ||
            StringUtils.isEmpty(teacher.getName()) ||
            StringUtils.isEmpty(teacher.getGender()) ||
            StringUtils.isEmpty(teacher.getDeptNumber())) {
            return false;
        }
        
        // 检查教师是否已存在
        if (existsTeacher(teacher.getTeacherId())) {
            return false;
        }
        
        // 设置默认头像（如果为空）
        if (StringUtils.isEmpty(teacher.getAvatar())) {
            teacher.setAvatar("https://example.com/default_teacher_avatar.png");
        }
        
        // 添加教师
        return teacherDao.insert(teacher) > 0;
    }

    /**
     * 更新教师信息
     *
     * @param teacher 教师信息
     * @return 是否成功
     */
    @Override
    @Transactional
    public boolean updateTeacher(Teacher teacher) {
        // 验证参数
        if (teacher == null || StringUtils.isEmpty(teacher.getTeacherId())) {
            return false;
        }
        
        // 验证教师是否存在
        if (!existsTeacher(teacher.getTeacherId())) {
            return false;
        }
        
        // 更新教师信息
        return teacherDao.update(teacher) > 0;
    }

    /**
     * 删除教师
     *
     * @param teacherId 教师工号
     * @return 是否成功
     */
    @Override
    @Transactional
    public boolean deleteTeacher(String teacherId) {
        if (StringUtils.isEmpty(teacherId)) {
            return false;
        }
        
        // 验证教师是否存在
        if (!existsTeacher(teacherId)) {
            return false;
        }
        
        // 删除教师
        return teacherDao.delete(teacherId) > 0;
    }

    /**
     * 更新教师密码
     *
     * @param teacherId 教师工号
     * @param password  新密码
     * @return 是否成功
     */
    @Override
    @Transactional
    public boolean updatePassword(String teacherId, String password) {
        // 验证参数
        if (StringUtils.isEmpty(teacherId) || StringUtils.isEmpty(password)) {
            return false;
        }
        
        // 验证教师是否存在
        if (!existsTeacher(teacherId)) {
            return false;
        }
        
        // 更新密码
        return teacherDao.updatePassword(teacherId, password) > 0;
    }

    /**
     * 检查教师是否存在
     *
     * @param teacherId 教师工号
     * @return 是否存在
     */
    @Override
    public boolean existsTeacher(String teacherId) {
        if (StringUtils.isEmpty(teacherId)) {
            return false;
        }
        return teacherDao.exists(teacherId);
    }

    /**
     * 根据关键字搜索教师
     *
     * @param keyword 关键字
     * @return 教师列表
     */
    @Override
    public List<Teacher> search(String keyword) {
        return teacherDao.search(keyword);
    }
} 